package com.zhiche.lisa.bms.service.contract;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zhiche.lisa.bms.dao.model.contract.Contract;
import com.zhiche.lisa.bms.dao.model.contract.ContractAccessory;
import com.zhiche.lisa.bms.dao.model.quote.Quote;
import com.zhiche.lisa.bms.pojo.vo.contract.ContractAccessoryVO;
import com.zhiche.lisa.bms.pojo.vo.contract.ContractVO;
import com.zhiche.lisa.bms.pojo.vo.contract.PrintContractVO;
import com.zhiche.lisa.bms.pojo.vo.quote.QuoteCommonVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 合同主表 服务类
 * </p>
 *
 * @author liuanshun
 * @since 2018-10-23
 */
public interface ContractService extends IService<Contract> {

    /**
     * 新增合同
     *
     * @param contract
     * @return
     */
    Contract insertContract(Contract contract);

    /**
     * 新增合同以及附件
     *
     * @param contractVO
     */
    void insertContractAndContractAccessories(ContractVO contractVO);

    /**
     * 合同编辑更新
     *
     * @param contractVO
     */
    void updateContract(ContractVO contractVO);

    /**
     * 根据分页条件获取分页合同数据
     *
     * @param pageParam
     * @return
     */
    Page<Contract> selectContractPage(Page<Contract> pageParam);

    /**
     * 根据条件获取合同信息
     *
     * @param condition
     * @return
     */
    List<Contract> selectContractList(Map<String, Object> condition);

    /**
     * 根据条件获取合同信息
     *
     * @param condition
     * @return
     */
    List<Contract> selectContractListNoTenant(Map<String, Object> condition);

    /**
     * 根据车队id查找匹配合同
     *
     * @param fleetId
     * @return
     */
    List<Contract> getContractAreExamineListByFleetId(Long fleetId, String queryType);

    /**
     * 获取报价单可绑定合同
     *
     * @param fleetTypeId
     * @return
     */
    List<Contract> selectQuoteCanBindContract(String fleetTypeId);

    /**
     * 报价单关联合同
     *
     * @param quoteCommonVO
     * @return
     */
    List<Contract> quoteBindContract(QuoteCommonVO quoteCommonVO);

    /**
     * 合同提交审核
     *
     * @param ids
     * @return
     */
    void contractRequestCheck(List<Long> ids);

    /**
     * 合同作废
     *
     * @param ids
     */
    void contractInvalid(List<Long> ids);

    /**
     * 获取已有乙方名称
     *
     * @return
     */
    List<Object> getFleetTypeName();

    /**
     * 根据主表id获取附件
     *
     * @param id
     * @return
     */
    List<ContractAccessory> getContractAccessoryByHeadId(Long id);

    /**
     * 根据合同id获取详明信息
     *
     * @param id
     * @return
     */
    ContractVO getContractDetail(Long id);

    /**
     * 下载附件
     *
     * @param id
     * @return
     */
    List<ContractAccessoryVO> upLoadContractAccessory(Long id);

    /**
     * 审核
     *
     * @param id
     * @return
     */
    Contract examine(Long id);

    /**
     * 根据code查找对应合同
     *
     * @param code
     * @return
     */
    Contract selectContractByCode(String code);

    /**
     * 获取需要打印的合同详情信息
     *
     * @param contractId
     * @return
     */
    PrintContractVO selectPrintContractDetail(Long contractId);
}

